WebRTCã®ããã³ããšã³ãã«ãããé©å¿åãããã¬ãŒãã¹ããªãŒãã³ã°ã®è€éããæ¢æ±ãæ§ã ãªãããã¯ãŒã¯æ¡ä»¶äžã§ãŠãŒã¶ãŒäœéšãæé©åããããã«ãåçã«æ åå質ã調æŽããã¢ã«ãŽãªãºã ã«ã€ããŠåŠã³ãŸãã
ããã³ããšã³ãWebRTCé©å¿åãããã¬ãŒãã¹ããªãŒãã³ã°ïŒå質調æŽã¢ã«ãŽãªãºã ã®æ·±æã
WebRTCïŒWeb Real-Time CommunicationïŒã¯ãWebãã©ãŠã¶å ã§çŽæ¥ã·ãŒã ã¬ã¹ãªé³å£°ããã³æ åã¹ããªãŒãã³ã°ãå¯èœã«ãããªã¢ã«ã¿ã€ã éä¿¡ã«é©åœããããããŸãããWebRTCã§é«å質ãªãŠãŒã¶ãŒäœéšãæäŸããäžã§ãç¹ã«å€åãããããã¯ãŒã¯æ¡ä»¶äžã§éèŠãªåŽé¢ããé©å¿åãããã¬ãŒãïŒABRïŒã¹ããªãŒãã³ã°ã§ãããã®ããã°èšäºã§ã¯ãWebRTCã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ãã§ABRãæ¯ããã¢ã«ãŽãªãºã ãæ·±ãæãäžãããŠãŒã¶ãŒã®èŠèŽäœéšãæé©åããããã«æ åå質ãã©ã®ããã«åçã«èª¿æŽãããããå æ¬çã«è§£èª¬ããŸãã
é©å¿åãããã¬ãŒãïŒABRïŒã¹ããªãŒãã³ã°ãšã¯äœãïŒ
ABRã¹ããªãŒãã³ã°ã¯ãå©çšå¯èœãªåž¯åå¹ ããã®ä»ã®ãããã¯ãŒã¯ç¶æ ã«åºã¥ããŠæ åå質ãåçã«èª¿æŽãããããã«ããããã¯ãŒã¯çµç±ã§æ åã³ã³ãã³ããã¹ããªãŒãã³ã°ããæè¡ã§ããåäžã®æ åãåºå®ãããã¬ãŒãã§ã¹ããªãŒãã³ã°ãã代ããã«ãæ åã¯è€æ°ã®ãããã¬ãŒãïŒããã³è§£å床ïŒã§ãšã³ã³ãŒããããåãæ åã®ããã€ãã®ç°ãªãããŒãžã§ã³ãäœæãããŸããã¯ã©ã€ã¢ã³ãïŒãã®å Žåã¯ããã³ããšã³ãã®WebRTCã¢ããªã±ãŒã·ã§ã³ïŒã¯ãçŸåšã®ãããã¯ãŒã¯ç¶æ ã«åºã¥ããŠåçã«æãé©ããããŒãžã§ã³ãéžæããŸãã
ABRã®ç®æšã¯ãã¹ã ãŒãºã§äžæã®ãªãèŠèŽäœéšãæäŸããããšã§ãããããã¯ãŒã¯åž¯åå¹ ãåºãå Žåãã¯ã©ã€ã¢ã³ãã¯é«ãããã¬ãŒãã®æ åããŒãžã§ã³ãéžæã§ããé«å質ãªèŠèŽãå¯èœã«ãªããŸãã垯åå¹ ãçãå Žåãã¯ã©ã€ã¢ã³ãã¯äœãããã¬ãŒãã®ããŒãžã§ã³ã«åãæ¿ããããšã§ããããã¡ãªã³ã°ãé²ããç¶ç¶çãªã¹ããªãŒã ãç¶æããŸãã
ãªãWebRTCã«ãããŠABRã¯éèŠãªã®ãïŒ
WebRTCã¢ããªã±ãŒã·ã§ã³ã¯ãäºæž¬äžå¯èœãªãããã¯ãŒã¯ç°å¢ã§åäœããããšããããããŸãããŠãŒã¶ãŒã¯åŒ·åºŠãå€åããWi-Fiãããã¯ãŒã¯äžããæ··éã¬ãã«ãå€åããã¢ãã€ã«ãããã¯ãŒã¯äžã«ãããããããŸãããABRããªããã°ãWebRTCã¢ããªã±ãŒã·ã§ã³ã¯ãææªã®ã·ããªãªã«å¯Ÿå¿ããããã«äœãããã¬ãŒãã§æ åãã¹ããªãŒãã³ã°ãããïŒè¯å¥œãªæ¥ç¶ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠã¯å質ãäœäžããïŒã垯åå¹ ãéããããŠãŒã¶ãŒã«å¯ŸããŠã¯é »ç¹ãªãããã¡ãªã³ã°ãäžæã®ãªã¹ã¯ãåããã®ã©ã¡ãããããããŸããã§ããã
ABRã¯ãå©çšå¯èœãªåž¯åå¹ ã«åçã«é©å¿ããããšã§ãã®åé¡ã解決ããŸããããã«ãããWebRTCã¢ããªã±ãŒã·ã§ã³ã¯ããããã¯ãŒã¯ç¶æ ã«é¢ããããåãŠãŒã¶ãŒã«å¯èœãªéãæé«ã®æ åå質ãæäŸã§ããŸããããã¯ããããã¯ãŒã¯ã€ã³ãã©ãã€ã³ã¿ãŒãããé床ã倧ããç°ãªãã°ããŒãã«ãªå±éã«ãããŠç¹ã«éèŠã§ãã
ããã³ããšã³ãWebRTC ABRã·ã¹ãã ã®æ§æèŠçŽ
ããã³ããšã³ãWebRTC ABRã·ã¹ãã ã¯ãéåžžã以äžã®ã³ã³ããŒãã³ãã§æ§æãããŸãã
- æ åãšã³ã³ãŒãã£ã³ã°ïŒ æ åãœãŒã¹ã¯ãããããç°ãªããããã¬ãŒããšè§£å床ãæã€è€æ°ã®ããŒãžã§ã³ã«ãšã³ã³ãŒããããå¿ èŠããããŸããããã¯éåžžãæ åãã¯ã©ã€ã¢ã³ãã«ã¹ããªãŒãã³ã°ãããåã«ããµãŒããŒãµã€ãã§è¡ãããŸãã
- ãããã§ã¹ããã¡ã€ã«ïŒ ãããã§ã¹ããã¡ã€ã«ïŒäŸïŒDASHãããã§ã¹ããHLSãã¬ã€ãªã¹ãïŒã¯ãå©çšå¯èœãªæ åããŒãžã§ã³ããã®ãããã¬ãŒããè§£å床ãããã³å Žæãèšè¿°ããŸããããã³ããšã³ãã¯ãã®ãã¡ã€ã«ã䜿çšããŠãã©ã®ããŒãžã§ã³ããªã¯ãšã¹ãã§ãããã倿ããŸãã
- 垯åå¹ æšå®ïŒ ããã³ããšã³ãã¯ãå©çšå¯èœãªãããã¯ãŒã¯åž¯åå¹ ãç¶ç¶çã«æšå®ããå¿ èŠããããŸãããã®æšå®ã¯ãã©ã®æ åããŒãžã§ã³ããªã¯ãšã¹ããããã«ã€ããŠæ å ±ã«åºã¥ããæ±ºå®ãäžãããã«äžå¯æ¬ ã§ãã
- å質調æŽã¢ã«ãŽãªãºã ïŒ ãã®ã¢ã«ãŽãªãºã ã¯ã垯åå¹ ã®æšå®å€ã䜿çšããŠé©åãªæ åããŒãžã§ã³ãéžæããŸãããããã¡ãªã³ã°ãæå°éã«æãã€ã€ãæ åå質ãæå€§åããããšãç®æããŸãã
- ãããªãã¬ãŒã€ãŒïŒ ãããªãã¬ãŒã€ãŒã¯ãéžæãããæ åããŒãžã§ã³ã®ãªã¯ãšã¹ããšåçãæ åœããŸãããŸãããããã¯ãŒã¯ç¶æ ãå€åããéã®ç°ãªãããŒãžã§ã³éã®åãæ¿ããåŠçããŸãã
å質調æŽã¢ã«ãŽãªãºã ïŒããã³ããšã³ãABRã®æ žå¿
å質調æŽã¢ã«ãŽãªãºã ã¯ãããã³ããšã³ãABRã·ã¹ãã ã®æ žå¿ã§ããå©çšå¯èœãªåž¯åå¹ ã«åºã¥ããŠã©ã®æ åããŒãžã§ã³ããªã¯ãšã¹ããããã«ã€ããŠãã€ã³ããªãžã§ã³ããªæ±ºå®ãäžã責任ããããŸããããã€ãã®ç°ãªãã¢ã«ãŽãªãºã ã䜿çšã§ããããããã«é·æãšçæããããŸããããã§ã¯ãäžè¬çã§å¹æçãªã¢ã«ãŽãªãºã ã®ããã€ããæ¢ããŸãã
1. ãããã¡ããŒã¹ã®ã¢ã«ãŽãªãºã
ãããã¡ããŒã¹ã®ã¢ã«ãŽãªãºã ã¯ããããã¡ãªã³ã°ã€ãã³ããé²ãããã«ååãªæ åããŒã¿ã®ãããã¡ãç¶æããããšã«çŠç¹ãåœãŠãŠããŸããéåžžããããã¡ã¬ãã«ãæææ±ºå®ããã»ã¹ã®äž»èŠãªå ¥åãšããŠäœ¿çšããŸãã
åºæ¬çãªãããã¡ããŒã¹ã®ã¢ã«ãŽãªãºã ïŒ
ããã¯æãåçŽãªã¿ã€ãã®ãããã¡ããŒã¹ã®ã¢ã«ãŽãªãºã ã§ããæ¬¡ã®ããã«åäœããŸãã
- ãããã¡ã¬ãã«ãç¹å®ãããå€ïŒäŸïŒ5ç§ïŒãäžåãå Žåãã¢ã«ãŽãªãºã ã¯ããäœããããã¬ãŒãã®ããŒãžã§ã³ã«åãæ¿ããŸãã
- ãããã¡ã¬ãã«ãå¥ã®ãããå€ïŒäŸïŒ10ç§ïŒãäžåãå Žåãã¢ã«ãŽãªãºã ã¯ããé«ããããã¬ãŒãã®ããŒãžã§ã³ã«åãæ¿ããŸãã
- ãã以å€ã®å Žåãã¢ã«ãŽãªãºã ã¯çŸåšã®æ åããŒãžã§ã³ãç¶æããŸãã
äŸïŒ
function adjustQuality(bufferLevel, currentBitrate, availableBitrates) {
const lowBufferThreshold = 5; // Seconds
const highBufferThreshold = 10; // Seconds
if (bufferLevel < lowBufferThreshold) {
// Switch to a lower bitrate
const lowerBitrates = availableBitrates.filter(bitrate => bitrate < currentBitrate);
if (lowerBitrates.length > 0) {
return Math.max(...lowerBitrates); // Select the highest available lower bitrate
}
} else if (bufferLevel > highBufferThreshold) {
// Switch to a higher bitrate
const higherBitrates = availableBitrates.filter(bitrate => bitrate > currentBitrate);
if (higherBitrates.length > 0) {
return Math.min(...higherBitrates); // Select the lowest available higher bitrate
}
}
return currentBitrate; // Maintain the current bitrate
}
å©ç¹ïŒ
- å®è£ ãç°¡åã
- ãããã¡ãªã³ã°ã®é²æ¢ã«å¹æçã
æ¬ ç¹ïŒ
- å€åãããããã¯ãŒã¯ç¶æ ãžã®é©å¿ãé ãããšãããã
- åžžã«æé©ãªæ åå質ãéžæãããšã¯éããªãã
æ¹åç¹ïŒ
åºæ¬çãªãããã¡ããŒã¹ã®ã¢ã«ãŽãªãºã ã«ã¯ãããã€ãã®æ¹åãå ããããŸããäŸãã°ã
- ã¢ããã¹ã€ãããšããŠã³ã¹ã€ããã«ç°ãªããããå€ã䜿çšããã
- ç¬éå€ã®ä»£ããã«ãããã¡ã¬ãã«ã®ç§»åå¹³åã䜿çšããã
- æ°ããã»ã°ã¡ã³ãã®ããŠã³ããŒãã«ãããæéãèæ ®ã«å ¥ããã
2. 垯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã
垯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã ã¯ãæšå®ããããããã¯ãŒã¯åž¯åå¹ ãçŽæ¥äœ¿çšããŠé©åãªæ åããŒãžã§ã³ãéžæããŸããéåžžãæ åã»ã°ã¡ã³ãã®ããŠã³ããŒãã«ãããæéãæž¬å®ããããšã§åž¯åå¹ ãæšå®ããŸãã
åºæ¬çãªåž¯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã ïŒ
ãã®ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«åäœããŸãã
- åã®æ åã»ã°ã¡ã³ãã®ããŠã³ããŒãæéãæž¬å®ããŠãå©çšå¯èœãªåž¯åå¹ ãæšå®ããã
- æšå®åž¯åå¹ ãäžåãæé«ãããã¬ãŒãã®ããŒãžã§ã³ãéžæããã
äŸïŒ
async function adjustQuality(availableBitrates, segmentDownloadTime, segmentSizeInBytes) {
// Estimate bandwidth in bits per second
const bandwidth = (segmentSizeInBytes * 8) / (segmentDownloadTime / 1000); // Convert ms to seconds
// Select the highest bitrate below the estimated bandwidth
let selectedBitrate = availableBitrates[0]; // Default to the lowest bitrate
for (const bitrate of availableBitrates) {
if (bitrate <= bandwidth) {
selectedBitrate = bitrate;
} else {
break; // Bitrates array is assumed to be sorted in ascending order
}
}
return selectedBitrate;
}
å©ç¹ïŒ
- ãããã¡ããŒã¹ã®ã¢ã«ãŽãªãºã ããããå€åãããããã¯ãŒã¯ç¶æ ãžã®å¿çæ§ãé«ãã
- ããé«ãæ åå質ãéæã§ããå¯èœæ§ãããã
æ¬ ç¹ïŒ
- å®è£ ãããè€éã
- 垯åå¹ ã®æšå®å€ã«ãã€ãºãå€ãå Žåãæ¯åïŒé »ç¹ãªåãæ¿ãïŒãçºçããããã
æ¹åç¹ïŒ
åºæ¬çãªåž¯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã ã«ã¯ãããã€ãã®æ¹åãå ããããŸããäŸãã°ã
- 垯åå¹ æšå®å€ã®ç§»åå¹³åã䜿çšããŠå€åãå¹³æ»åããã
- 垯åå¹ æšå®å€ã«å ããŠãããã¡ã¬ãã«ãèæ ®ã«å ¥ããã
- ãããã¬ãŒãéã®é »ç¹ãªåãæ¿ããé²ãããã«ãã¹ããªã·ã¹ã¡ã«ããºã ãå®è£ ããã
3. ãã€ããªããã¢ã«ãŽãªãºã
ãã€ããªããã¢ã«ãŽãªãºã ã¯ããããã¡ããŒã¹ãšåž¯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã ã®äž¡æ¹ã®é·æãçµã¿åããããã®ã§ããéåžžããããã¡ã¬ãã«ãšåž¯åå¹ æšå®å€ã®äž¡æ¹ãæææ±ºå®ããã»ã¹ã®å ¥åãšããŠäœ¿çšããŸãã
äŸïŒ
ãã€ããªããã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«åäœãããããããŸããã
- ãããã¡ã¬ãã«ãäœãå Žåãã¢ã«ãŽãªãºã ã¯åž¯åå¹ ã®æšå®å€ã«é¢ä¿ãªããããäœããããã¬ãŒãã®ããŒãžã§ã³ã«åãæ¿ããŸãã
- ãããã¡ã¬ãã«ãé«ãå Žåãã¢ã«ãŽãªãºã ã¯åž¯åå¹ ã®æšå®å€ãäžåãæé«ãããã¬ãŒãã®ããŒãžã§ã³ãéžæããŸãã
- ãã以å€ã®å Žåãã¢ã«ãŽãªãºã ã¯çŸåšã®æ åããŒãžã§ã³ãç¶æããŸãã
å©ç¹ïŒ
- æ åå質ãšãããã¡ãªã³ã°ã®éã®è¯å¥œãªãã©ã³ã¹ãéæã§ããã
- ãããã¡ããŒã¹ãŸãã¯åž¯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã åç¬ããããæ§ã ãªãããã¯ãŒã¯ç¶æ ã«å¯ŸããŠããå ç¢ã
æ¬ ç¹ïŒ
- ãããã¡ããŒã¹ãŸãã¯åž¯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã ãããå®è£ ãè€éã
- æé©ãªããã©ãŒãã³ã¹ãéæããããã«ã¯ããã©ã¡ãŒã¿ã®æ³šææ·±ã調æŽãå¿ èŠã
4. æ©æ¢°åŠç¿ããŒã¹ã®ã¢ã«ãŽãªãºã
ããé«åºŠãªABRã¢ã«ãŽãªãºã ã¯ãæ©æ¢°åŠç¿æè¡ãå©çšããŠå°æ¥ã®ãããã¯ãŒã¯ç¶æ ãäºæž¬ããæ åå質ãæé©åããŸãããããã®ã¢ã«ãŽãªãºã ã¯ãéå»ã®ãããã¯ãŒã¯ã®æåããåŠç¿ããããã«å¿ããŠæŠç¥ãé©å¿ãããããšãã§ããŸãã
äŸïŒåŒ·ååŠç¿ããŒã¹ã®ABRã¢ã«ãŽãªãºã ã¯ãæ åå質ãšãããã¡ãªã³ã°ã€ãã³ãã®äž¡æ¹ãèæ ®ããå ±é ¬é¢æ°ã«åºã¥ããŠãæé©ãªãããã¬ãŒããéžæããããã«èšç·Žããããšãã§ããŸããã¢ã«ãŽãªãºã ã¯ãçŸåšã®ãããã¯ãŒã¯ç¶æ ãèæ ®ããŠãã©ã®ãããã¬ãŒããæãé«ãå ±é ¬ãããããããæéãšãšãã«åŠç¿ããŸãã
å©ç¹ïŒ
- åŸæ¥ã®ã¢ã«ãŽãªãºã ãããé«ãæ åå質ãšäœããããã¡ãªã³ã°çãéæã§ããå¯èœæ§ãããã
- å€åãããããã¯ãŒã¯ç¶æ ããŠãŒã¶ãŒã®è¡åã«é©å¿ã§ããã
æ¬ ç¹ïŒ
- åŸæ¥ã®ã¢ã«ãŽãªãºã ãããå®è£ ãšèšç·Žãè€éã
- 广çã«èšç·Žããããã«ã¯å€§éã®ããŒã¿ãå¿ èŠã
ããã³ããšã³ãã§ã®ABRã®å®è£
WebRTCã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ãã§ABRãå®è£ ããããã«äœ¿çšã§ããããã€ãã®JavaScriptã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ããããŸãã人æ°ã®ãããªãã·ã§ã³ã«ã¯ä»¥äžãå«ãŸããŸãã
- Hls.jsïŒ HTTP Live Streaming (HLS) ã¯ã©ã€ã¢ã³ããå®è£ ããJavaScriptã©ã€ãã©ãªã
- Dash.jsïŒ Dynamic Adaptive Streaming over HTTP (DASH) ã¯ã©ã€ã¢ã³ããå®è£ ããJavaScriptã©ã€ãã©ãªã
- Shaka PlayerïŒ DASHãšHLSã®äž¡æ¹ããµããŒãããJavaScriptã©ã€ãã©ãªã
ãããã®ã©ã€ãã©ãªã¯ããããã§ã¹ããã¡ã€ã«ã®èªã¿èŸŒã¿ã垯åå¹ ã®æšå®ãé©åãªæ åããŒãžã§ã³ã®éžæã®ããã®APIãæäŸããŸãããŸããç°ãªãæ åããŒãžã§ã³éã®ã¹ã ãŒãºãªåãæ¿ãã®è€éããåŠçããŸãã
Hls.jsã䜿çšããäŸïŒ
if (Hls.isSupported()) {
var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource('your_hls_manifest.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, function() {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = 'your_hls_manifest.m3u8';
video.addEventListener('loadedmetadata', function() {
video.play();
});
}
ã°ããŒãã«å±éã«é¢ããèæ ®äºé
WebRTC ABRã¢ããªã±ãŒã·ã§ã³ãã°ããŒãã«ã«å±éããå Žåãããã€ãã®èŠå ãèæ ®ããå¿ èŠããããŸãã
- ãããã¯ãŒã¯ã€ã³ãã©ïŒ ãããã¯ãŒã¯ã€ã³ãã©ã¯å°åã«ãã£ãŠå€§ããç°ãªããŸãããããã®å€åã«åŒ·ãABRã¢ã«ãŽãªãºã ãéžæããããšãéèŠã§ãã
- ã€ã³ã¿ãŒãããéåºŠïŒ ã€ã³ã¿ãŒãããé床ãå°åã«ãã£ãŠå€§ããç°ãªããŸããå©çšå¯èœãªãããã¬ãŒãã¯ã察象å°åã®ã€ã³ã¿ãŒãããé床ã®ç¯å²ã«å¯Ÿå¿ããããã«éžæããå¿ èŠããããŸããããã«ã¯ãæ¥ç¶ãéãããŠããå°åã®ãŠãŒã¶ãŒã®ããã«éåžžã«äœããããã¬ãŒãã®ãªãã·ã§ã³ãæäŸããããšãå«ãŸããå ŽåããããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒïŒ CDNã䜿çšãããšãæ åã³ã³ãã³ãããŠãŒã¶ãŒã®è¿ãã«ãã£ãã·ã¥ããããšã§ãWebRTC ABRã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããããã«ãããé å»¶ãæžå°ããããŠã³ããŒãé床ãåäžããŸãã
- ãŠãŒã¶ãŒããã€ã¹ã®èœåïŒ ããã€ã¹ã«ãã£ãŠåŠçèœåãç»é¢ãµã€ãºãç°ãªããŸããæ åãšã³ã³ãŒãã£ã³ã°ã¯ã察象ããã€ã¹ã«åãããŠæé©åããå¿ èŠããããŸãããã€ãšã³ãã®ã¹ããŒããã©ã³ããæ§åŒã®ã©ããããããŸã§ãå¹ åºãããã€ã¹ã«å¯Ÿå¿ããããã«ãç°ãªãè§£å床ãã³ãŒããã¯ãæäŸããããšãæ€èšããŠãã ããã
- ããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒ å°åããšã«ç°ãªãããŒã¿ãã©ã€ãã·ãŒèŠå¶ã«æ³šæããŠãã ãããABRã·ã¹ãã ãåæãªãã«æ©å¯æ§ã®é«ããŠãŒã¶ãŒããŒã¿ãåéãŸãã¯ä¿åããªãããã«ããŠãã ãããããŒã¿åŠçã«ãããéææ§ã¯éåžžã«éèŠã§ãã
ããã³ããšã³ãWebRTC ABRå®è£ ã®ãã¹ããã©ã¯ãã£ã¹
以äžã¯ãããã³ããšã³ãWebRTC ABRãå®è£ ããéã«åŸãã¹ããã¹ããã©ã¯ãã£ã¹ã§ãã
- ã·ã³ãã«ãªã¢ã«ãŽãªãºã ããå§ããïŒ åºæ¬çãªãããã¡ããŒã¹ãŸãã¯åž¯åå¹ ããŒã¹ã®ã¢ã«ãŽãªãºã ããå§ããå¿ èŠã«å¿ããŠåŸã ã«è€éããå ããŠãããŸãã
- ããã©ãŒãã³ã¹ãç£èŠããïŒ ABRã·ã¹ãã ã®ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããå¿ èŠã«å¿ããŠèª¿æŽãè¡ããŸãããããã¡ãªã³ã°çãå¹³åãããã¬ãŒããèµ·åé å»¶ãªã©ã®ã¡ããªã¯ã¹ã远跡ããŸãã
- CDNã䜿çšããïŒ CDNã䜿çšããŠABRã·ã¹ãã ã®ããã©ãŒãã³ã¹ãåäžãããŸãã
- ç°ãªãããã€ã¹ãšãããã¯ãŒã¯ã§ãã¹ãããïŒ æ§ã ãªããã€ã¹ãšãããã¯ãŒã¯ã§ABRã·ã¹ãã ã培åºçã«ãã¹ããããã¹ãŠã®ã·ããªãªã§è¯å¥œã«åäœããããšã確èªããŸããããã«ã¯ãç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒWindows, macOS, Android, iOSïŒããã©ãŠã¶ïŒChrome, Firefox, Safari, EdgeïŒã§ã®ãã¹ããå«ãŸããã¹ãã§ãã
- ãŠãŒã¶ãŒãã£ãŒãããã¯ãèæ ®ããïŒ ãŠãŒã¶ãŒããã®ãã£ãŒãããã¯ãåéããæ¹åç¹ãç¹å®ããŸãã
- æ åãšã³ã³ãŒãã£ã³ã°ãæé©åããïŒ ç°ãªããããã¬ãŒããšè§£å床ã«åãããŠæ åãšã³ã³ãŒãã£ã³ã°ãé©åã«æé©åããŸãã
- å ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããïŒ ãããã¯ãŒã¯ã®åæããããã§ã¹ããã¡ã€ã«ã®ãšã©ãŒãªã©ãæœåšçãªãšã©ãŒãé©åã«åŠçããŸãã
- ã³ã³ãã³ããä¿è·ããïŒ äžæ£ã¢ã¯ã»ã¹ããæ åã³ã³ãã³ããä¿è·ããããã«ãé©åãªã»ãã¥ãªãã£å¯Ÿçãå®è£ ããŸããããã«ã¯ãæå·åãããžã¿ã«èäœæš©ç®¡çïŒDRMïŒãå«ãŸããå ŽåããããŸãã
çµè«
é©å¿åãããã¬ãŒãã¹ããªãŒãã³ã°ã¯ãç¹ã«æ§ã ãªãããã¯ãŒã¯æ¡ä»¶äžã§ãWebRTCã¢ããªã±ãŒã·ã§ã³ã«ãããŠé«å質ãªãŠãŒã¶ãŒäœéšãæäŸããããã®éèŠãªæè¡ã§ããå©çšå¯èœãªåž¯åå¹ ã«åºã¥ããŠæ åå質ãåçã«èª¿æŽããããšã§ãABRã¯äžçäžã®ãŠãŒã¶ãŒã«ã¹ã ãŒãºã§äžæã®ãªãèŠèŽäœéšãä¿èšŒããŸããå ç¢ã§å¹æçãªWebRTCã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ã¯ãããŸããŸãªå質調æŽã¢ã«ãŽãªãºã ãšãã®ãã¬ãŒããªããçè§£ããããšãäžå¯æ¬ ã§ãããã®èšäºã§æŠèª¬ãã課é¡ãšãã¹ããã©ã¯ãã£ã¹ãèæ ®ããããšã§ãéçºè ã¯å€æ§ãªãããã¯ãŒã¯ç°å¢ã®ãŠãŒã¶ãŒã«å¯ŸããŠæé©ãªæ åå質ãæäŸãããããã¡ãªã³ã°ãæå°éã«æããABRã·ã¹ãã ãäœæã§ããŸãã
ABRã¢ã«ãŽãªãºã ã®ç¶ç¶çãªé²æ©ãç¹ã«æ©æ¢°åŠç¿ã®çµ±åã¯ãå°æ¥çã«ã¯æ åã¹ããªãŒãã³ã°ãæé©åããããã®ããã«æŽç·Žãããå¹ççãªæ¹æ³ãçŽæããŸãããããã®éçºã«ã€ããŠåžžã«æ å ±ãåŸãããšããäžçäžã®èŠèŽè ã«æé«ã®ãªã¢ã«ã¿ã€ã éä¿¡äœéšãæäŸããããã®éµãšãªããŸãã
ãããªã調æ»ã®ããã«ïŒ
- WebRTC å ¬åŒãŠã§ããµã€ã
- Mozilla WebRTC ããã¥ã¡ã³ã
- æ åã¹ããªãŒãã³ã°ã«ãããé©å¿åãããã¬ãŒãã¢ã«ãŽãªãºã ãšäœéšå質ïŒQoEïŒã«é¢ããç ç©¶è«æã